package br.com.hs.biosys.model.domain;

import br.com.hs.biosys.model.domain.generics.GenericDomain;
import java.util.Objects;
import javax.persistence.*;

/**
 * User.class
 *
 * @author Ranlive Hrysyk
 * @since 19/07/2012
 */
@Entity
@Table(name = "\"User\"")
public class User extends GenericDomain {

    private static final long serialVersionUID = 1L;
    // *********************** PROPERTIES *********************************** //
    public static final String PROPERTY_ID = "userID";
    public static final String PROPERTY_LOGIN = "login";
    public static final String PROPERTY_PASSWORD = "password";
    // ********************************************************************** //
    /**
     * ID da entidade. Auto gerado.
     */
    @Id
    @Column(name = "\"UserID\"", nullable = false, updatable = false)
    private Long userID;
    /**
     * Pessoa. Não nulo.
     */
    @OneToOne
    @JoinColumn(name = "\"PersonID\"", nullable = false, updatable = false)
    private Person person;
    /**
     * Nome de usuário. Tamanho 20. Não nulo.
     */
    @Column(name = "\"Login\"", nullable = false, length = 20)
    private String login;
    /**
     * Senha. Tamanho 64. Não Nulo.
     */
    @Column(name = "\"Password\"", nullable = false, length = 64)
    private String password;

    /**
     * Constructor default.
     */
    public User() {
    }

    /**
     * Constructor with identity.
     *
     * @param userID the id
     */
    public User(Long userID) {
        this.userID = userID;
    }

    /**
     * ID da entidade. Auto gerado.
     *
     * @return the userID
     */
    public Long getUserID() {
        return userID;
    }

    /**
     * Pessoa. Não nulo.
     *
     * @return the person
     */
    public Person getPerson() {
        return person;
    }

    /**
     * Pessoa. Não nulo.
     *
     * @param person the person to set
     */
    public void setPerson(Person person) {
        this.person = person;
    }

    /**
     * Nome de usuário. Tamanho 20. Não nulo.
     *
     * @return the login
     */
    public String getLogin() {
        return login;
    }

    /**
     * Nome de usuário. Tamanho 20. Não nulo.
     *
     * @param login the login to set
     */
    public void setLogin(String login) {
        this.firePropertyChange(PROPERTY_LOGIN, this.login, this.login = login);
    }

    /**
     * Senha. Tamanho 64. Não Nulo.
     *
     * @return the password
     */
    public String getPassword() {
        return password;
    }

    /**
     * Senha. Tamanho 64. Não Nulo.
     *
     * @param password the password to set
     */
    public void setPassword(String password) {
        this.firePropertyChange(PROPERTY_PASSWORD, this.password, this.password = password);
    }
}
